// BIMFACE 模型文件管理相关接口
// https://bimface.com/docs/file-management/v1/developers-guide/introduce.html

import  bimfaceHttp from '@/api/Bimface';
import { FileItemModel, FileItemArrayModel } from './model/projectModel';
import {
  FileItemsFilterData,
  FileItemPathModel,
  RenameFolderData,
  CreateFolderData,
} from './model/folderModel';

enum Api {
  Folders = '/bdfs/data/v1/projects',
}

/**
 * @abstract: 指定目录下创建文件夹
 * @description: 在指定的位置创建文件夹，可对文件进行分类管理。需要获取所属的项目ID，以及文件夹所在位置的上层文件ID或文件路径，两个参数必须二选一填入。
 */
export function createFolder(projectId: string, data: CreateFolderData) {
  return bimfaceHttp.post<FileItemModel>({
    url: Api.Folders + `/${projectId}/folders`,
    data: data,
  });
}

/**
 * @abstract: 获取文件夹信息
 * @description: 根据文件夹ID或文件夹路径，可获取文件夹信息，包含文件夹名称、创建时间等。
 */
export function getFolderInfo(projectId: string, folderId: string) {
  return bimfaceHttp.get<FileItemModel>({
    url: Api.Folders + `/${projectId}/folders?folderId=${folderId}`,
  });
}

/**
 * @abstract: 获取文件夹下的所有文件
 * @description: 通过接口获取指定文件夹下所有的文件信息，这里的文件指的各个文件项的当前版本，支持根据父文件夹ID或父文件夹路径两种方式获取。
 */
export function getAllFileItems(projectId: string, data: FileItemsFilterData) {
  return bimfaceHttp.post<FileItemArrayModel>({
    url: Api.Folders + `/${projectId}/folders/contents`,
    data: data,
  });
}

/**
 * @abstract: 获取文件夹路径
 * @description: 通过接口，根据文件夹的ID可获得文件夹的所在位置信息。
 */
export function getFolderPath(projectId: string, folderId: string) {
  return bimfaceHttp.get<FileItemPathModel>({
    url: Api.Folders + `/${projectId}/folders/${folderId}/path`,
  });
}

/**
 * @abstract: 获取父文件夹
 * @description: 根据文件夹ID获取其上一层文件夹的信息，包含名称、创建时间等。
 */
export function getParentFolder(projectId: string, folderId: string) {
  return bimfaceHttp.get<FileItemModel>({
    url: Api.Folders + `/${projectId}/folders/${folderId}/parent`,
  });
}

/**
 * @abstract: 文件夹重命名
 * @description: 通过接口对文件夹的名称进行修改，可通过文件夹ID和文件夹路径两种参数指定需要修改的文件夹。
 */
export function renameFolder(projectId: string, data: RenameFolderData) {
  return bimfaceHttp.patch<FileItemModel>({
    url: Api.Folders + `/${projectId}/folders`,
    data: data,
  });
}

/**
 * @abstract: 删除文件夹
 * @description: 删除指定文件夹，文件夹内所有文件（包括文件项下的所有版本文件）也被删除。
 */
export function deleteFolder(projectId: string, folderId?: string, path?: string) {
  return bimfaceHttp.delete<FileItemModel>({
    url: Api.Folders + `/${projectId}/folders?folderId=${folderId}&path=${path}`,
  });
}
